#if !defined(__APP_MESSAGE_H)
#define __APP_MESSAGE_H

// 连接类型枚举
typedef enum
{
    CONN_NONE,
    CONN_BT,
    CONN_LORA,
    CONN_CAN
} ConnectionType;

// 消息结构体
typedef struct
{
    unsigned char *payload; // 消息负载数据由id和msg组成
    ConnectionType conn_type; // 连接类型
    int id_len; // id长度
    int msg_len; // msg长度
} Message;

/**
 * @brief 根据二进制格式的数据初始化消息
 * @param ptr 二进制格式的数据指针
 * @param len 数据长度
 * @return 消息指针
 */
Message *app_message_initByBinary(char *ptr, int len);

/**
 * @brief 根据JSON格式的数据初始化消息
 * @param json JSON格式的数据指针
 * @param len 数据长度
 * @return 消息指针
 */
Message *app_message_initByJson(char *json);

/**
 * @brief 将消息转换为二进制格式数据
 * @param msg 消息指针
 * @param ptr 二进制格式的数据指针
 * @param len 数据长度
 * @return 转换后的数据长度
 */
int app_message_toBinary(Message *msg, char *ptr, int len);

/**
 * @brief 将消息转换为JSON格式数据
 * @param msg 消息指针
 * @param json JSON格式的数据指针
 * @param len 数据长度
 * @return 转换后的数据长度
 */
int app_message_toJson(Message *msg, char *json, int len);

/**
 * @brief 释放消息内存
 * @param msg 消息指针
 * @return 无
 */
void app_message_free(Message *msg);


#endif // __APP_MESSAGE_H
